﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Sped.Sped
{
    /// <summary>
    /// REGISTRO 0140: TABELA DE CADASTRO DE ESTABELECIMENTO
    /// </summary>
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("SpedPisCofins.Reg0140")]
    [ComVisible(true)]
    public class Reg0140 : IBloco
    {
        /// <summary>
        /// Código de identificação do estabelecimento
        /// </summary>
        public string COD_EST { get; set; }
        /// <summary>
        /// Nome empresarial do estabelecimento
        /// </summary>
        public string NOME { get; set; }
        /// <summary>
        /// Número de inscrição do estabelecimento no CNPJ
        /// </summary>
        public string CNPJ { get; set; }
        /// <summary>
        /// Sigla da unidade da federação do estabelecimento
        /// </summary>
        public string UF { get; set; }
        /// <summary>
        /// Inscrição Estadual do estabelecimento, se contribuinte de ICMS
        /// </summary>
        public string IE { get; set; }
        /// <summary>
        /// Código do município do domicílio fiscal do estabelecimento,
        /// conforme a tabela IBGE
        /// </summary>
        public string COD_MUN { get; set; }
        /// <summary>
        /// Inscrição Municipal do estabelecimento, se contribuinte do ISS
        /// </summary>
        public string IM { get; set; }
        /// <summary>
        /// Inscrição do estabelecimento na Suframa
        /// </summary>
        public string SUFRAMA { get; set; }

        public override bool ValidaRegistro(ref string Erro)
        {
            var ValidacaoOK = true;
            Erro = "";

            if (string.IsNullOrEmpty(this.COD_EST))
                this.COD_EST = string.Empty;
            
            if (string.IsNullOrEmpty(this.NOME))
            {
                this.NOME = string.Empty;
                Erro += "\r\n* Registro 0140 - Nome empresarial do estabelecimento não informado.";
                ValidacaoOK = false;
            }
            
            if (string.IsNullOrEmpty(this.CNPJ))
            {
                this.CNPJ = string.Empty;
                Erro += "\r\n* Registro 0140 - Número de inscrição do estabelecimento no CNPJ não informado.";
                ValidacaoOK = false;
            }
            
            if (string.IsNullOrEmpty(this.UF))
            {
                this.UF = string.Empty;
                Erro += "\r\n* Registro 0140 - UF do estabelecimento não informada.";
                ValidacaoOK = false;
            }
            
            if (string.IsNullOrEmpty(this.IE))
                this.IE = string.Empty;
            
            if (string.IsNullOrEmpty(this.IM))
                this.IM = string.Empty;
            
            if (string.IsNullOrEmpty(this.SUFRAMA))
                this.SUFRAMA = string.Empty;
            
            if (string.IsNullOrEmpty(this.COD_MUN))
            {
                this.COD_MUN = "";
                Erro += "\r\n* Registro 0140 - Código do Município não informado.";
                ValidacaoOK = false;
            }

            return ValidacaoOK;
        }

        public override string Layout()
        {
            var Linha = string.Empty;

            Linha += "0140" + this.Delimitador;
            Linha += this.COD_EST.Trim() + this.Delimitador;
            Linha += this.NOME.Trim().TirarAcento() + this.Delimitador;
            Linha += this.COD_EST.Trim() + this.Delimitador;
            Linha += this.UF.Trim() + this.Delimitador;
            Linha += this.IE.Trim() + this.Delimitador;
            Linha += this.COD_MUN.Trim() + this.Delimitador;
            Linha += this.IM.Trim() + this.Delimitador;
            Linha += this.SUFRAMA.Trim() + this.Delimitador;

            return Linha.Trim();
        }
    }
}
